package main

import (
	"fmt"
	"log"
	"os"

	"github.com/gin-gonic/gin"
	"gopkg.in/yaml.v3"
)

type Config struct {
	// Server configuration
	Server struct {
		Host string `yaml:"host"` // 服务器主机
		Port int    `yaml:"port"` // 服务器端口
	} `yaml:"server"`

	Upload struct {
		Path     string `yaml:"path"`     // 上传文件的存储路径
		Filename string `yaml:"filename"` // 上传文件的默认名称
	} `yaml:"upload"`
}

func main() {
	r := gin.Default()

	// 解析yaml配置文件
	var config Config
	data, err := os.ReadFile("config.yaml")
	if err != nil {
		log.Fatalf("无法读取配置文件: %v", err)
	}

	if err := yaml.Unmarshal(data, &config); err != nil {
		log.Fatalf("解析配置文件失败: %v", err)
	}

	// 使用Info级别日志打印配置，避免使用Panicln（会导致程序退出）
	log.Printf("成功加载配置: %+v", config)

	// 直接下载文件
	r.GET("/download", func(c *gin.Context) {
		// 可以从配置中获取文件路径，使代码更灵活
		filePath := config.Upload.Path + "/" + config.Upload.Filename

		// 检查文件是否存在
		if _, err := os.Stat(filePath); os.IsNotExist(err) {
			c.JSON(404, gin.H{"error": "文件不存在"})
			return
		}

		// 设置附件下载，浏览器会弹出保存框
		c.FileAttachment(filePath, config.Upload.Filename)
	})

	// 启动服务器，增加错误处理
	r.Run(fmt.Sprintf("%s:%d", config.Server.Host, config.Server.Port))

}
